package com.wangrui.server.servlet;

import gwtupload.server.UploadAction;
import gwtupload.server.exceptions.UploadActionException; 
import gwtupload.shared.UConsts;  
import org.apache.commons.fileupload.FileItem;  
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Hashtable; 
import java.util.List;  
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class UploadServlet extends UploadAction{
	
	private static final long serialVersionUID = 1L;
	
	Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>();
	
	 Hashtable<String, File> receivedFiles = new Hashtable<String, File>();	
	 
	  public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException {   
		  String response = "";   
		  int cont = 0;   
		  for (FileItem item : sessionFiles) {      
			  if (false == item.isFormField()) {     
				  cont ++;       
				  try {          
					  /// Create a new file based on the remote file name in the client          // 
					  String saveName = item.getName().replaceAll("[\\\\/><\\|\\s\"'{}()\\[\\]]+", "_");  //获取文件名 
					  File file =new File("D:/test" + saveName);    //设置存储路径                
					  // Create a temporary file placed in /tmp (only works in unix)         
					   //File file = File.createTempFile("upload-", ".bin", new File("/tmp"));                    /// Create a temporary file placed in the default system temp folder          
					   //File file = File.createTempFile("upload-", ".bin"); 
					  
					  item.write(file);                    /// Save a list with the received files          
					  receivedFiles.put(item.getFieldName(), file);         
					  receivedContentTypes.put(item.getFieldName(), item.getContentType());                    /// Send a customized message to the client.        
					  response += "File saved as " + file.getAbsolutePath();  
					  System.out.println("文件路径："+file.getAbsolutePath());
					  
					  } catch (Exception e) {         
						  throw new UploadActionException(e);     
						  }     
					  }   
			  }        /// Remove files from session because we have a copy of them    
		  removeSessionFileItems(request);        /// Send your customized message to the client.    
		  return response; 
		  }
	  public void getUploadedFile(HttpServletRequest request, HttpServletResponse response) throws IOException {    
		  String fieldName = request.getParameter(UConsts.PARAM_SHOW);    
		  File f = receivedFiles.get(fieldName);    
		  if (f != null) {      
			  response.setContentType(receivedContentTypes.get(fieldName));       
			  FileInputStream is = new FileInputStream(f);     
			  copyFromInputStreamToOutputStream(is, response.getOutputStream());   
			  } else 
			  {     
				  renderXmlResponse(request, response,  XML_ERROR_ITEM_NOT_FOUND);  
				  }  
		  } 
	  public void removeItem(HttpServletRequest request, String fieldName)  throws UploadActionException {    
		  File file = receivedFiles.get(fieldName);     
		  receivedFiles.remove(fieldName);    
		  receivedContentTypes.remove(fieldName);    
		  if (file != null) {     
			  file.delete();   
			  } 
		  }
	  } 